In computation, a finite-state machine (FSM) is event driven if the transition from one state to another is triggered by an event or a message. This is in contrast to the parsing-theory origins of the term finite-state machine where the machine is described as consuming characters or tokens.
Often these machines are implemented as threads or processes communicating with one another as part of a larger application. For example, a telecommunication protocol is most of the time implemented as an event-driven finite-state machine.
This code describes the state machine for a very basic car radio system. It is basically an infinite loop that reads incoming events. The state machine is only 2 states: radio mode, or CD mode. The event is either a mode change from radio to cd back and forth, or a go to next (next preset for radio or next track for CD).
/********************************************************************/ #include <stdio.h> /********************************************************************/ typedef enum { RADIO, CD } STATES; int readEventFromMessageQueue(void); /********************************************************************/ int main(void) { /* Default state is radio */ int state = RADIO; stationNumber=0; trackNumber=0; /* Infinite loop */ while( 1 ) { /* Read the next incoming event. Usually this is a blocking function. */ event = readEventFromMessageQueue() /* Switch the state and the event to execute the right transition. */ switch( state ) { case RADIO: switch(event) { case mode: /* Change the state */ state = CD; break; case next: /* Increase the station number */ stationNumber++; break; } break; case CD: switch(event) { case mode: /* Change the state */ state = RADIO; break; case next: /* Go to the next track */ trackNumber++; break; } break; } } }